package cn.h8k.hj212.version;

/**
 * HJ212协议版本枚举
 * 支持不同版本的HJ212协议
 * 
 * @author HJ212 Team
 * @since 1.0
 */
public enum ProtocolVersion {
    
    /**
     * HJ212-2005版本
     */
    HJ212_2005("HJ212-2005", "2005", "HJ212协议2005版本"),
    
    /**
     * HJ212-2017版本（当前主要支持版本）
     */
    HJ212_2017("HJ212-2017", "2017", "HJ212协议2017版本"),
    
    /**
     * HJ212-2024版本（未来版本）
     */
    HJ212_2024("HJ212-2024", "2024", "HJ212协议2024版本");
    
    private final String fullName;
    private final String shortName;
    private final String description;
    
    ProtocolVersion(String fullName, String shortName, String description) {
        this.fullName = fullName;
        this.shortName = shortName;
        this.description = description;
    }
    
    /**
     * 获取协议全名
     * @return 协议全名
     */
    public String getFullName() {
        return fullName;
    }
    
    /**
     * 获取协议简称
     * @return 协议简称
     */
    public String getShortName() {
        return shortName;
    }
    
    /**
     * 获取协议描述
     * @return 协议描述
     */
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据简称获取协议版本
     * @param shortName 简称
     * @return 协议版本
     */
    public static ProtocolVersion fromShortName(String shortName) {
        for (ProtocolVersion version : values()) {
            if (version.getShortName().equals(shortName)) {
                return version;
            }
        }
        return HJ212_2017; // 默认返回2017版本
    }
    
    /**
     * 根据全名获取协议版本
     * @param fullName 全名
     * @return 协议版本
     */
    public static ProtocolVersion fromFullName(String fullName) {
        for (ProtocolVersion version : values()) {
            if (version.getFullName().equals(fullName)) {
                return version;
            }
        }
        return HJ212_2017; // 默认返回2017版本
    }
    
    /**
     * 检查是否支持指定版本
     * @param version 版本
     * @return 是否支持
     */
    public static boolean isSupported(ProtocolVersion version) {
        // 目前主要支持2017版本，其他版本可以根据需要扩展
        return version == HJ212_2017;
    }
    
    /**
     * 获取默认版本
     * @return 默认版本
     */
    public static ProtocolVersion getDefault() {
        return HJ212_2017;
    }
}
